package com.example.photography;

import android.content.Context;


import com.example.photography.bean.UserBean;
import com.example.photography.common.Constant;
import com.example.photography.dao.UpdateTableDao;
import com.example.photography.dao.UsersTableDao;
import com.example.photography.db.DBManger;
import com.hyphenate.chat.EMClient;
import com.mob.pushsdk.MobPush;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;



//数据模型层全局类
public class Model {
    //上下文对象
    private Context mContext;
    //获取线程池
    private ExecutorService executors = Executors.newCachedThreadPool();
    //创建对象
    private static Model model;
    //用户账号数据库的操作类
    private UsersTableDao usersTableDao;
    //版本信息数据库的操作类
    private UpdateTableDao updateTableDao;
    //同一个用户相关消息表的操作类的管理类
    private DBManger dbManger;
    //私有化构造
    private Model() {
    }

    //获取单例对象
    //得到这个对象对本类的方法进行调用
    public static Model getInstance(){
        if(model == null) {
            synchronized (Model.class) {
                if(model == null) {
                    model = new Model();
                }
            }
        }
        return model;
    }

    //初始化的方法
    public void init(Context context){
        mContext = context;
        //创建用户账号数据库的操作类对象
        usersTableDao = new UsersTableDao(mContext);
        //创建版本信息数据库的操作类对象
        updateTableDao = new UpdateTableDao(mContext);


    }

    //获取全局线程池对象
    public ExecutorService getGlobalThreadPool(){
        return executors;
    }
    //用户登录成功后的处理方法
    public void loginSuccess(UserBean.User account){
        //校验
        if (account == null){
            return;
        }
        if (dbManger != null){
            dbManger.close();
        }
        dbManger = new DBManger(mContext, account.getId_unique());
        //初始化环信
        EMClient.getInstance().groupManager().loadAllGroups();
        EMClient.getInstance().chatManager().loadAllConversations();
    }
    //获取同一个用户相关消息表的操作类的管理类对象
    public DBManger getDbManger(){
        return dbManger;
    }
    //获取用户账号数据库的操作类对象
    public UsersTableDao getUerAccountDao(){
        return usersTableDao;
    }
    //获版本信息数据库的操作类对象
    public UpdateTableDao getUpdateTableDao(){
        return updateTableDao;
    }
}
